SV--task and function

function和task的区别,传参种类,ref类型,传参缺省值、传参方向。

 

a: 函数和任务的区别在于,任务可以带时序,函数不能。

       函数和任务的传参可以在名字后的小括号里,也可以在函数和任务体内。传参是默认顺序,也可以使用.in(addr)这种形参方式。

       函数和任务的参数缺省值为方向为input,类型为logic。建议不缺省。一旦指定一个参数的方向,那它就成为后面参数的缺省方向。

       参数方向可以为input、output、inout(函数开始时复制,结束时输出)、ref(传递引用,传递句柄或指针),如果传参为const ref,这函数内部不会改变此参数。ref只能用在automatic的子程序。

       传参默认值时,调用此函数时,可以缺少传参。否则,不能缺少传参。

       void’( func1()); 忽略func1函数的返回值,仿真器不会告警。

       module和program,package的函数和任务默认是静态的,可以使用automatic改为动态的。而在class中的函数和任务默认是动态automatic的。可以在静态函数中,指定变量或者形参为自动的;也可以在自动函数中,将形参和变相声明称静态的。

b:  class中有属性(property)和方法(method);他们的作用域分为3种:public,local和protected。(class中默认是automatic的)

  1:默认都是public。

  2:property声明为local类型的,则只在该class中的methods可以调用该变量。即使subclass也不可以调用。

  3:property或者method声明为protected,与local类似,但是在subclass中可见。

c: funciton在执行到子程序的最后一行就返回,将返回值赋给与功能同名变量,也可以显式的调用return来返回。在function中不能再声明一个同名的var,会造成冲突。

 task内部是不会返回值的,但是也可以调用return,但是不带返回值

d: 数组变量到function的传递,通过ref模块或者直接数组变量(数据量会比较大).

e:verilog对子程序参数的处理是,在进入子程序时,将input和inout的值赋值给子程序本地变量,在子程序返回时将output和inout的值赋值给模块中的变量。

posted on 2020-01-19 18:57  superany  阅读(1479)  评论(0编辑  收藏  举报

导航